//   1. 下载  yarn add axios  npm  i  axios
import axios from "axios";

// 1， 进度条下载，npm 查找{请求加载条}
import NProgress from "nprogress";
// 2，引入样式
import "nprogress/nprogress.css";

import store from "@/store";
import { getUserTempId } from "@/utils/tools";
//   2.生成 axios 对象, {}中进行配置
const request = axios.create({
  baseURL: "/api", //配置了baseURL时，使用request 发请求是，会复用,请求地址将会是 beseURL + url
  timeout: 20000, //请求超时，超时时，就断接请求
  //    headers: { }   设置请求头
});

// { interceptors(拦截器)   }

// 请求拦截器
request.interceptors.request.use(
  // 请求成功的回调函数
  (config) => {
    // （设置）复用公共请求参数
    // config就是请求的配置对象
    // config.params.xxx = xxx
    // config.data.xxx = xxx
    // config.headers.xxx = xxx
    NProgress.start(); //开始进度条
    const token = store.state.user.token;
      //  console.log(token);
    if (token) {
      config.headers.token = token;
    } else {
      config.headers.userTempId = getUserTempId();
    }

    return config; // 必须return config 不然没请求配置对象
  },
  // 请求失败的回调函数
  () => {}
);

// 响应拦截器
request.interceptors.response.use(
  // 服务器响应成功的函数   response接收的是服务器返回来的数据   res
  (response) => {
    // 结束进度条
    NProgress.done();

    if (response.data.code === 200) {
      //根据数据功能的code 判断是否是功能请求成了
      return response.data.data;
    } else {
      alert(response.data.message);
      return Promise.reject(response.data.message); // 返回一个失败的promise对象
    }
  },
  // 服务器响应失败执行的函数
  (error) => {
    NProgress.done(); // 结束进度条
    alert(error);
    return Promise.reject(error); // 返回一个失败的promise对象
  }
);

export default request;
